#!/usr/bin/env python3
"""
清理用户数据文件中的重复记录
"""

import sys
import os
import json
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from gt_lms.managers.user_manager import UserManager
from gt_lms.models.user import UserRole

def clean_user_data():
    """清理用户数据文件中的重复记录"""
    print("开始清理用户数据文件...")
    
    # 获取UserManager单例实例
    user_manager = UserManager.get_instance()
    
    # 获取当前用户数据
    data_file = user_manager.data_file
    
    try:
        # 读取当前数据
        with open(data_file, 'r', encoding='utf-8') as f:
            data = json.load(f)
        
        # 获取用户数据
        users_data = data.get('users', {})
        
        # 重建role_users字典，确保没有重复
        role_users_clean = {
            UserRole.STUDENT.value: [],
            UserRole.TEACHER.value: [],
            UserRole.ADMIN.value: []
        }
        
        # 遍历所有用户，根据角色添加到对应的列表
        for user_id, user_data in users_data.items():
            role = user_data.get('role', '')
            if role in role_users_clean:
                if user_id not in role_users_clean[role]:
                    role_users_clean[role].append(user_id)
        
        # 更新数据
        data['role_users'] = role_users_clean
        
        # 保存清理后的数据
        with open(data_file, 'w', encoding='utf-8') as f:
            json.dump(data, f, indent=2, ensure_ascii=False)
        
        print(f"用户数据文件已清理并保存到 {data_file}")
        
        # 打印清理后的统计信息
        print("\n清理后的用户统计:")
        for role, user_ids in role_users_clean.items():
            print(f"{role}: {len(user_ids)} 个用户")
        
        # 重新加载数据到内存
        user_manager.load_users()
        
        # 验证清理结果
        print("\n验证清理结果:")
        stats = user_manager.get_user_count()
        print(f"总用户数: {stats['total']}")
        print(f"学生数量: {stats['students']}")
        print(f"教师数量: {stats['teachers']}")
        print(f"管理员数量: {stats['admins']}")
        
        # 测试get_users_by_role方法
        print("\n测试get_users_by_role方法:")
        students = user_manager.get_users_by_role(UserRole.STUDENT)
        print(f"实际学生数量: {len(students)}")
        teachers = user_manager.get_users_by_role(UserRole.TEACHER)
        print(f"实际教师数量: {len(teachers)}")
        admins = user_manager.get_users_by_role(UserRole.ADMIN)
        print(f"实际管理员数量: {len(admins)}")
        
        print("\n用户数据文件清理完成!")
        
    except Exception as e:
        print(f"清理用户数据文件时出错: {e}")

if __name__ == "__main__":
    clean_user_data()